#include "regmod_perdida.h"
#include "ui_regmod_perdida.h"
#include <QSpinBox>
#include <Utils/Utils.h>
#include <QPrinter>
#include <QPainter>
#include <QDesktopServices>
#include <QDir>
#include <QUrl>


Regmod_perdida::Regmod_perdida(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Regmod_perdida)
{
    ui->setupUi(this);
    id_Perdida =  0;
    ui->tablaInsumos->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->tablaInsumosPerdidos->resizeColumnsToContents();
    ui->tablaInsumosPerdidos->setColumnWidth(1, 50);
    ui->tablaInsumosPerdidos->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->fechaDateEdit->setDisplayFormat("dd/MMM/yyyy");
    ui->fechaDateEdit->setDate(QDate::currentDate());
    ui->info_estado->setHidden(true);
    ui->verComprobante->setHidden(true);


    QDjangoQuerySet<Insumo> insumos;
    if(insumos.count() > 0){
        foreach(const Insumo &insumo, insumos)
        {
            int rowCount = ui->tablaInsumos->rowCount();
            QString nombre = insumo.getNombre();
            ui->tablaInsumos->insertRow(rowCount);
            ui->tablaInsumos->model()->setData(ui->tablaInsumos->model()->index(rowCount, 0), insumo.getNombre());
        }
    }
}

Regmod_perdida::~Regmod_perdida()
{
    delete ui;
}

void Regmod_perdida::on_agregar_clicked()
{
    int filas_seleccionadas = ui->tablaInsumos->selectionModel()->selection().count();
    if(filas_seleccionadas > 0)
    {
        int cantFilasRemovidas = 0;
        QModelIndexList allIndexes = ui->tablaInsumos->selectionModel()->selectedRows();
        foreach(QModelIndex index, allIndexes)
        {
            int rowCount = ui->tablaInsumosPerdidos->rowCount();
            ui->tablaInsumosPerdidos->insertRow(rowCount);
            ui->tablaInsumosPerdidos->model()->setData(ui->tablaInsumosPerdidos->model()->index(rowCount, 0),
                                                       ui->tablaInsumos->model()->data(ui->tablaInsumos->model()->index(index.row()-cantFilasRemovidas,0)));
            ui->tablaInsumos->removeRow(index.row()-cantFilasRemovidas);
            cantFilasRemovidas++;

        }
    }
    else cuadroMensaje("", "Debe seleccionar uno o mas insumos");
}

void Regmod_perdida::on_deshacer_clicked()
{
    int filasRemovidas = 0;
    int filasSeleccionadas = ui->tablaInsumosPerdidos->selectionModel()->selection().count();
    if(filasSeleccionadas > 0)
    {
        //Obtener todos los indices seleccionados
        QModelIndexList seleccion;
        int filas_seleccionadas = ui->tablaInsumosPerdidos->selectionModel()->selection().count();
        if(filas_seleccionadas > 0)
        {

            if(ui->tablaInsumosPerdidos->selectionModel()->selectedRows().count() < 1)
            {
                QModelIndexList allIndexes = ui->tablaInsumosPerdidos->selectionModel()->selectedIndexes();
                foreach(QModelIndex index, allIndexes)
                {
                    seleccion.append(index.sibling(index.row(), 0));

                }
            }
            else
            {
                seleccion = ui->tablaInsumosPerdidos->selectionModel()->selectedRows();

            }

        }

        //Iterar los indices seleccionados
        foreach(QModelIndex index, seleccion){
            qDebug() << "Fila : " + QString::number(index.row()) + " Columna : " + QString::number(index.column());
            int rowCount = ui->tablaInsumos->rowCount();
            ui->tablaInsumos->insertRow(rowCount);
            ui->tablaInsumos->model()->setData(ui->tablaInsumos->model()->index(rowCount,0),
                                               ui->tablaInsumosPerdidos->model()->data(ui->tablaInsumosPerdidos->model()->index(index.row()-filasRemovidas,0)));
            ui->tablaInsumosPerdidos->removeRow(index.row()-filasRemovidas);
            filasRemovidas++;
        }
    }
    else
    {
        cuadroMensaje("", "Debe seleccionar uno o mas insumos perdidos");
    }
}

void Regmod_perdida::on_aceptar_clicked()
{
    int cantFilas = ui->tablaInsumosPerdidos->rowCount();
    if(cantFilas > 0)
    {
        for(int indexRow= 0; indexRow < cantFilas; indexRow++){

            int maxId=0;
            QString nombreInsumo =ui->tablaInsumosPerdidos->model()->data(ui->tablaInsumosPerdidos->model()->index(indexRow, 0)).toString();
            int cantidad = ui->tablaInsumosPerdidos->model()->data(ui->tablaInsumosPerdidos->model()->index(indexRow, 1)).toInt();
            //Inserta 1 si no se establece la cantidad
            cantidad = cantidad != 0 ? cantidad : 1;

            QSqlQuery query("Select coalesce(max(id_perdida)+1,1)from perdida");
            while(query.next()){
                maxId = query.value(0).toInt();
                id_Perdida = maxId;
            }

            QDjangoQuerySet<Insumo> insumos;
            Insumo *insumo = insumos.filter(QDjangoWhere("nombre", QDjangoWhere::Equals, nombreInsumo)).at(0);

            Perdida *perdida = new Perdida();
            perdida->setId_perdida(maxId);
            perdida->setCantidad(cantidad);
            perdida->setInsumo(insumo);
            perdida->setObservacion(ui->observaciones->toPlainText().simplified());

            if(ui->radioButtonFechaActual->isChecked()) perdida->setFecha_perdida(QDate::currentDate());
            else if(ui->radioButtonOtraFecha->isChecked())perdida->setFecha_perdida(ui->fechaDateEdit->date());
            if(perdida->save()){
                query.exec("update insumo set stock_actual = "+  QString::number(insumo->getStock_actual()-perdida->getCantidad()) +" where idinsumo = " + QString::number(insumo->getIdinsumo()));
                qDebug() << query.lastQuery();
                qDebug() << "Perdidas(s) registradas Correctamente";
                ui->verComprobante->setHidden(false);
                ui->info_estado->setHidden(false);
            }
            else qDebug("No se pudo registrar la perdida");
            delete perdida;
            delete insumo;
        }
    }
    else{
        cuadroMensaje("","No se seleccionaron Insumos");
    }
}

void Regmod_perdida::on_verComprobante_clicked()
{
    QSqlQuery query;


    QPainter painter;
    QPrinter printer;

    //Fonts
    QFont titulo("Arial", 14);
    titulo.setBold(true);
    titulo.setUnderline(true);
    QFont items("Arial", 12);
    QFont subtitulo("Arial", 13);
    subtitulo.setBold(true);
    subtitulo.setItalic(true);

    QRect rec(15,15, 735, 1060);

    QRect recHeader(15,135, 735, 120);

    QRect tituloContenido(80, 330,600, 80);

    printer.setOutputFormat(QPrinter::PdfFormat);
    printer.setOutputFileName(QDir::homePath() + "/salida.pdf");
    painter.begin(&printer);
    painter.setPen(Qt::SolidLine);

    painter.drawRect(rec);
    painter.setBrush(QBrush(QColor(Qt::lightGray).light(115)));
    painter.drawRect(recHeader);
    painter.drawRect(tituloContenido);

    //Titulos
    painter.setFont(titulo);
    painter.drawText(260, 160, "COMPROBANTE DE PERDIDA");

    //Subtitulos
    painter.setFont(subtitulo);
    painter.drawText(110, 380, "INSUMO");
    painter.drawText(290, 380, "CANTIDAD");
    painter.drawText(480, 380, "OBSERVACIONES");

    //Items de cabecera

    painter.setFont(items);
    painter.drawText(55, 190, "Usuario : Belen Jara");
    painter.drawText(55, 220, "Fecha : ");

    //Items de tabla

    int xInsumo = 130;
    int xCantidad = 340;
    int xOBservaciones = 470;
    int yItems = 380;
    yItems += 30;

    QSqlQuery queryIsnumo;
    query.exec("Select * from perdida where id_perdida = " + QString::number(id_Perdida));

    while(query.next()){
        QString nombreInsumo;
        queryIsnumo.exec("Select nombre from insumo where idinsumo = " + query.value("insumo_id").toString());
        while(queryIsnumo.next()){
            nombreInsumo = queryIsnumo.value(0).toString();
        }
        yItems += 40;
        painter.drawText(xInsumo, yItems, nombreInsumo);
        painter.drawText(xCantidad, yItems, query.value("cantidad").toString());
        painter.drawText(xOBservaciones, yItems, query.value("observacion").toString());
    }

    painter.end();

    QString file = QDir::homePath() + "/salida.pdf";
    QUrl url = QUrl::fromLocalFile(file);
    QDesktopServices::openUrl(url);
    //VisorDocumentos *visor = new VisorDocumentos(this, html);
    //visor->exec();
    //delete visor;
}
